"""
string 和bytes
bytes 只负责以字节序列的形式（二进制形式）来存储数据，至于这些数据到底表示什么内容（字符串、数字、图片、音频等），完全由程序的解析方式决定。
如果采用合适的字符编码方式（字符集），字节串可以恢复成字符串；
反之亦然，字符串也可以转换成字节串。

"""

def read_file():
    afile = open('/Users/edgar/Desktop/a.png', 'rb+')
    print(afile, type(afile)) # <_io.TextIOWrapper name='readme.md' mode='r+' encoding='UTF-8'>
    data = afile.read()

    # data = afile.readline()
    print(data, type(data)) # <class 'str'>  <class 'bytes'>
    afile.close()

def basic_usage():
    #通过构造函数创建空 bytes
    b1 = bytes()
    #通过空字符串创建空 bytes
    b2 = b''
    #通过b前缀将字符串转换成 bytes
    b3 = b'http://c.biancheng.net/python/'
    print("b3: ", b3)
    print(b3[3])
    print(b3[7:22])
    # 为 bytes() 方法指定字符集
    b4 = bytes('C语言中文网8岁了', encoding='UTF-8')
    print("b4: ", b4)
    # 通过 encode() 方法将字符串转换成 bytes
    b5 = "C语言中文网8岁了".encode('UTF-8')
    print("b5: ", b5)

    # 对于非 ASCII 字符，print 输出的是它的字符编码值（十六进制形式），而不是字符本身。
    # 非 ASCII 字符一般占用两个字节以上的内存，而 bytes 是按照单个字节来处理数据的，所以不能一次处理多个字节。

    #通过 decode() 方法将 bytes 转换成字符串
    str1 = b5.decode('UTF-8')
    print("str1: ", str1)

if __name__ == '__main__':

    read_file()
